package zhtt;

import org.hibernate.Session;
import org.junit.Test;
import zhtt.HbnUtil;
import zhtt.JunitTestUtil;

import java.util.Set;

/**
 * Created by zhtt on 2017/4/12.
 */
public class JunitTest01 extends JunitTestUtil {

    @Test
    /**
     * 一条sql语句完成查询
     * fetch=join:以左外连接的方式查询出全部数据
     */
    public void join(){
        try{
            zhtt.demo01_join.Country country=session.get(zhtt.demo01_join.Country.class,3);
            System.out.println("这是查询之后");
            Set<zhtt.demo01_join.Minister> ministerSet=country.getMinisterSet();
            System.out.println("这是从Country中get之后");
            System.out.println(ministerSet);
            System.out.println(country);
        }catch (Exception e){e.printStackTrace();}
    }

    @Test
    /**
     *  1、查询country；
     *  2、根据country_id查询minister
     *  二条sql语句全部加载完成
     */
    public void select(){
        try{
            zhtt.demo02_select.Country country=session.get(zhtt.demo02_select.Country.class,3);
            Set<zhtt.demo02_select.Minister> ministerSet=country.getMinisterSet();
            System.out.println(ministerSet);
        }catch (Exception e){e.printStackTrace();}
    }

    @Test
    /**
     *  1、查询country；
     *  2、根据country_id查询minister
     *  二条sql语句全部加载完成
     *  由于设置了lazy=true,所以只有在执行了country.getMinisterSet()后，才开始查询minister
     */
    public void select_true(){
        try{
            zhtt.demo03_select_true.Country country=session.get(zhtt.demo03_select_true.Country.class,3);
            System.out.println("countr已获取");
            Set<zhtt.demo03_select_true.Minister> ministerSet=country.getMinisterSet();
            System.out.println("Ministern已get");
            System.out.println(ministerSet);
        }catch (Exception e){e.printStackTrace();}
    }

    @Test
    /**
     *  extra:一种比较聪明的懒加载策略，即调用集合的size/contains等方法的时候，
     *  hibernate并不会去加载整个集合的数据，而是发出一条聪明的SQL语句，以便获得需要的值，
     *  只有在真正需要用到这些集合元素对象数据的时候，才去发出查询语句加载所有对象的数据
     */
    public void select_extra(){
        try{
            zhtt.demo04_select_extra.Country country=session.get(zhtt.demo04_select_extra.Country.class,3);
            System.out.println("countr已获取");
            Set<zhtt.demo04_select_extra.Minister> ministerSet=country.getMinisterSet();
            System.out.println("Ministern已get");
            System.out.println(ministerSet);
        }catch (Exception e){e.printStackTrace();}
    }
}
